// package com.sikulifang.bank.simulation.server;
//
// import cn.hutool.core.convert.Convert;
// import cn.hutool.core.lang.Dict;
// import cn.hutool.core.text.StrPool;
// import cn.hutool.db.Entity;
// import cn.hutool.json.JSONUtil;
// import com.sikulifang.bank.simulation.persistence.Bank;
// import com.sikulifang.bank.simulation.service.IBankConfigService;
// import com.sikulifang.bank.simulation.service.IBankMessage;
// import com.sikulifang.domain.RuleInfo;
// import com.sikulifang.server.AbstractControlFlowServer;
// import org.aspectj.lang.ProceedingJoinPoint;
// import org.springframework.beans.factory.annotation.Autowired;
//
// import java.util.List;
//
// /**
//  * ClassName BankInfoServer
//  * Description BankInfoServer
//  *
//  * @author Yat
//  * Date 2023年7月3日, 0003 16:42
//  * version 1.0
//  */
// // @Component
// // @Import(ControlFlowAspect.class)
// public class BankControlFlowServer extends AbstractControlFlowServer {
//
//     private List<IBankMessage> accountServices;
//
//     private IBankConfigService bankConfigService;
//
//     @Override
//     public RuleInfo findRuleInfo(ProceedingJoinPoint joinPoint) {
//
//         Object[] args = joinPoint.getArgs();
//
//         Bank bank = JSONUtil.toBean(JSONUtil.toJsonStr(args[0]), Bank.class);
//         String message = Convert.toStr(args[1]);
//         IBankMessage bankMessage = getAccountService(bank.getCode());
//         assert bankMessage != null;
//
//         // 接口名称
//         String actionName = bankMessage.getActionName(message);
//
//         String bankName = bank.getCode() + StrPool.DASHED + bank.getName();
//
//         // 根据当前接口的名称 ，获取接口的类型，是查询还是 转账交易
//         Dict dict = new Dict().set("bank_name", bankName)
//                 .set("interface_name", actionName);
//         Entity dataByKey = bankConfigService.getDataByKey(dict);
//         if (null == dataByKey) {
//             return null;
//         }
//         String interfaceType = dataByKey.getStr("interface_type");
//         int batchCount = dataByKey.get("batch_count", 1);
//
//         return RuleInfo.builder()
//                 .resourceName(bank.getCode() + StrPool.DASHED + actionName)
//                 .limitApp(bank.getCode())
//                 // .type(interfaceType)
//                 .batchCount(batchCount)
//                 .build();
//
//     }
//
//     private IBankMessage getAccountService(String code) {
//         for (IBankMessage accountService : accountServices) {
//             if (code.equals(accountService.bankCode())) {
//                 return accountService;
//             }
//         }
//         return null;
//     }
//
//     @Autowired
//     public void setBankConfigService(IBankConfigService bankConfigService) {
//         this.bankConfigService = bankConfigService;
//     }
//
//     @Autowired
//     public void setAccountServices(List<IBankMessage> accountServices) {
//         this.accountServices = accountServices;
//     }
// }
